iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Modern Web

Vue+Django+MongoDB+Nginx 全端開發系列 第 23

MongoDB: 更有技巧的查詢資料方法

  • 分享至 

  • xImage
  •  

在上一篇文章中,我們講解了 MongoDB 的基本操作,接下來想講講如何更有效率的查詢想要找的資料

模糊查詢

就是查詢的條件只要部分符合就可以找到了,不用查找的關鍵字完全正確,我們直接來舉個例子比較好理解

先假設有以下這些資料

{
  'item':'book1',
  'value':300
},
{
  'item':'book2',
  'value':200
},
{
  'item':'table',
  'value':6000
}

模糊查詢,查找的資料 item 值內有包含 book 就返回

mycol.find({'item':{'$regex':'book'}})

這樣就會找到

{
  'item':'book1',
  'value':300
},
{
  'item':'book2',
  'value':200
}

這兩筆資料了,因為 'book1''book2' 都包含 book

用比較運算子查詢

這個方法可以根據資料內某個值大於或小於某個值來查找資料,比方說我想找 value 大於 200 的資料就可以像這樣

mycol.find({'value':{'$gte':200}})

這樣就會找到

{
  'item':'book1',
  'value':300
},
{
  'item':'table',
  'value':6000
}

這樣就會找到這些資料

排序

有時候我們想讓找到的資料根據 document 內某個資料的數值來排序,可以用 sort 這個方法

mycol.find({'value':{'$gte':200}}).sort('value',-1)

這樣會是 value 數值大的排在前面

{
  'item':'table',
  'value':6000
},
{
  'item':'book1',
  'value':300
}

反之

mycol.find({'value':{'$gte':200}}).sort('value',1)

會是 value 數值小的排在前面

{
  'item':'book1',
  'value':300
},
{
  'item':'table',
  'value':6000
}

限制

隨著資料的增長,有時候我們會怕找到符合的資料太多,拖慢效能,會去限制最多找到多少 document

limit 這個功能去限制最多返回多少個 document

mycol.find({}).limit(10)

咦,這樣不就有些資料沒找到了嗎?別急下面我們馬上就會講了

分頁

我們可以在查詢資料的時候使用忽略前幾筆資料和限制只返回多少筆資料來做到分頁的效果

skip 做忽略

mycol.find({}).skip(10)

skiplimit 做到分頁效果

mycol.find({}).skip(10).limit(10)

在實務上後端會接收一個第幾頁的參數,來決定返回哪一部分的資料

pageNumber=request.GET['pageNumber']
nPerPage=10
data=mycol.find({}).skip(( pageNumber - 1 ) * nPerPage).limit(nPerPage)

上一篇
用 python 來操作 MongoDB
下一篇
MongoDB 資料庫複制 & 身份驗證
系列文
Vue+Django+MongoDB+Nginx 全端開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言